// app.js
App({
  onLaunch() {
    this.autoUpdate() // 检查更新
    // 展示本地存储能力
    const logs = wx.getStorageSync('logs') || []
    logs.unshift(Date.now())
    wx.setStorageSync('logs', logs)

    // 登录
    wx.login({
      success: res => {
        // 发送 res.code 到后台换取 openId, sessionKey, unionId
      }
    })

    // 检查登录状态
    this.checkLoginStatus()
    if(this.globalData.isLoggedIn){
      // 存储 token 和过期时间（重点看时间计算）
      const expiresIn = 30 * 24 * 60 * 60 * 1000; //一个月
      wx.setStorageSync('tokenExpires',  Date.now() + expiresIn)
    }
  },
  globalData: {
    isLoggedIn: false, // 全局登录状态
    userInfo: null,
    // baseUrl: 'http://localhost:8090'
    baseUrl:'https://zdwceshi.uno:8090'
  },
  // 导入并挂载方法
  userRequest: require('./utils/userApi.js'),
  proposalRequest: require('./utils/proposalApi'),
  globalFunction: require('./utils/globalFunction'),
  activityApi: require('./utils/activityApi.js'),
  newsApi: require('./utils/newsApi.js'),
  meetingApi: require('./utils/meetingApi.js'),
  civilApi: require('./utils/civilApi.js'),
  checkLoginStatus() {
    // 1. 同步获取存储数据
    const token = wx.getStorageSync('token');
    const tokenExpires = wx.getStorageSync('tokenExpires');

    // 2. 双重验证：存在性检查 + 过期时间校验
    if (token && tokenExpires && Date.now() < tokenExpires) {
      // 有效 token
      this.globalData.token = token;
      this.globalData.isLoggedIn = true;
      
      // 3. 每次检查时都刷新token过期时间
      const expiresIn = 30 * 24 * 60 * 60 * 1000; // 30天
      wx.setStorageSync('tokenExpires', Date.now() + expiresIn);
      
      return true;
    } else {
      // 4. 清除过期/无效数据
      wx.removeStorageSync('token');
      wx.removeStorageSync('tokenExpires');
      this.globalData.isLoggedIn = false;
      
      // 添加登录失效提示
      if (token && tokenExpires) {
        wx.showToast({
          title: '登录状态失效，请重新登录',
          icon: 'none',
          duration: 2000
        });
      }
      return false;
    }
  },
  autoUpdate: function() {
    var self = this
    // 获取小程序更新机制兼容
    if (wx.canIUse('getUpdateManager')) {
      const updateManager = wx.getUpdateManager()
      //1. 检查小程序是否有新版本发布
      updateManager.onCheckForUpdate(function(res) {
        // 请求完新版本信息的回调
        if (res.hasUpdate) {
          //检测到新版本，需要更新，给出提示
          wx.showModal({
            title: '更新提示',
            content: '检测到新版本，是否下载新版本并重启小程序？',
            showCancel: false,
            success: function(res) {
              if (res.confirm) {
                //2. 用户确定下载更新小程序，小程序下载及更新静默进行
                self.downLoadAndUpdate(updateManager)
              } else if (res.cancel) {
                //用户点击取消按钮的处理，如果需要强制更新，则给出二次弹窗，如果不需要，则这里的代码都可以删掉了
                wx.showModal({
                  title: '温馨提示~',
                  content: '本次版本更新涉及到新的功能添加，旧版本无法正常访问的哦~',
                  showCancel:false,//隐藏取消按钮
                  confirmText:"确定更新",//只保留确定更新按钮
                  success: function(res) {
                    if (res.confirm) {
                      //下载新版本，并重新应用
                      self.downLoadAndUpdate(updateManager)
                    }
                  }
                })
              }
            }
          })
        }
      })
    } else {
      // 如果希望用户在最新版本的客户端上体验您的小程序，可以这样子提示
      wx.showModal({
        title: '提示',
        content: '当前微信版本过低，无法使用该功能，请升级到最新微信版本后重试。',
        showCancel: false,
      })
    }
  },
  /**
   * 下载小程序新版本并重启应用
   */
  downLoadAndUpdate: function (updateManager){
    var self=this
    wx.showLoading();
    //静默下载更新小程序新版本
    updateManager.onUpdateReady(function () {
      wx.hideLoading()
      //新的版本已经下载好，调用 applyUpdate 应用新版本并重启
      updateManager.applyUpdate()
    })
    
    updateManager.onUpdateFailed(function () { 
      // 新的版本下载失败
      wx.hideLoading() // 确保加载提示被关闭
      
      wx.getNetworkType({
        success: function(res) {
          const networkType = res.networkType
          let content = ''
          
          if (networkType === 'none') {
            content = '网络连接已断开，请检查网络设置后重试'
          } else if (networkType === 'wifi') {
            content = '更新下载失败，请尝试重启微信或清理微信缓存后重试'
          } else {
            content = '当前使用移动网络，下载可能较慢或不稳定，建议切换到WIFI网络后重试'
          }
          
          wx.showModal({ 
            title: '更新失败', 
            content: content, 
            confirmText: '重试',
            cancelText: '稍后再说',
            success: function(res) {
              if (res.confirm) {
                // 用户点击重试，重新检查更新
                const updateManager = wx.getUpdateManager()
                updateManager.onCheckForUpdate(function(res) {
                  if (res.hasUpdate) {
                    self.downLoadAndUpdate(updateManager)
                  }
                })
                updateManager.applyUpdate()
              } else {
                // 用户选择稍后再说，可以记录状态，下次启动时提醒
                try {
                  wx.setStorageSync('pendingUpdate', 'true')
                } catch (e) {
                  console.error('保存更新状态失败', e)
                }
              }
            }
          }) 
        },
        fail: function() {
          // 获取网络状态失败，提供通用提示
          wx.showModal({ 
            title: '更新失败', 
            content: '小程序更新失败，请检查网络连接后重试，或删除当前小程序重新搜索打开', 
            confirmText: '重试',
            cancelText: '我知道了',
            success: function(res) {
              if (res.confirm) {
                // 用户点击重试
                const updateManager = wx.getUpdateManager()
                updateManager.onCheckForUpdate(function(res) {
                  if (res.hasUpdate) {
                    self.downLoadAndUpdate(updateManager)
                  }
                })
              }
            }
          })
        }
      })
    }) 
  }
})